﻿<!DOCTYPE HTML>
<html>

<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta name="viewport" content="width=480, user-scalable=0" />
    <title>天赋树-山河图·妖篇</title>
    <style>
        :root {
            --primary-gray: #353535;
            --secondary-gray: #f5f5f5;
            --major-content-width: 820px;
            font-size: 16px;
        }

        body {
            margin: 0;
            padding: 1.2em;
            font-size: 1rem;
            font-family: Segoe UI, Helvetica, system-ui, -apple-system, Arial, sans-serif;
            color: var(--primary-gray);
        }

        :root[style*="scroll-bahavior: unset !important;"]>body::-webkit-scrollbar {
            display: none;
        }

        h1 {
            font-size: 1.8em;
            text-align: center;
        }

        .second-title {
            margin: 1em auto;
            text-align: center;
            color: #888;
        }

        main {
            margin: 0 auto;
            max-width: var(--major-content-width);
        }

        .talents {
            margin: 1.5em 0;
            border-inline: thin solid var(--primary-gray);
        }

        .talents>header,
        #talentsContainer {
            margin: 0;
            padding: 0;
            display: grid;
            grid-template-columns: repeat(5, 1fr);
            place-items: center stretch;
            gap: 1.25em 0;
        }

        .talents>header {
            border-block: thin solid var(--primary-gray);
            background-color: #d5d5d5;
            font-size: 1.25em;
            position: sticky;
            inset-block-start: 0;
        }

        .talents>header>.header-item {
            padding: .5em .25em;
            font-weight: bold;
            text-align: center;
        }

        #talentsContainer {
            padding-block: .5em;
            background-image: repeating-linear-gradient(to right, var(--secondary-gray) 0 20%, transparent 20% 40%);
            list-style: none;
        }

        .talent-tactic {
            border-style: solid;
        }

        .talent-skill {
            border-style: dashed;
        }

        .talent-equip {
            border-style: double;
        }

        .talent-lv1 {
            background-color: #d9d9d9;
        }

        .talent-lv2 {
            background-color: #d9cbe7;
        }

        .talent-lv3 {
            background-color: #f8dfb9;
        }

        .talent-lv4 {
            background-color: #f9c3b8;
        }

        #talentsContainer>.talent-item {
            margin-inline: 5%;
            padding: .5em .25em;
            border-radius: 6px;
            border-width: medium;
            border-color: var(--primary-gray);
            font-weight: bold;
            text-align: center;
        }

        #talentsContainer>.talent-item::before {
            content: "\2b1c\fe0f";
            margin-inline-end: .2em;
            text-shadow: 0 0 2px var(--primary-gray);
            font-family: apple color emoji, Segoe UI emoji, android emoji, noto color emoji, emoji, sans-serif;
        }

        #talentsContainer>.talent-item.checked::before {
            content: "\2611\fe0f";
        }

        #talentsContainer>.talent-item::after {
            content: "[" attr(data-talent-cost) "]";
            font-size: .75em;
            vertical-align: text-top;
        }

        .talents>footer {
            padding: .5em 1.25em;
            display: flex;
            align-items: center;
            background-color: #d5d5d5;
            border-block: thin solid var(--primary-gray);
            position: sticky;
            inset-block-end: 0;
        }

        #resetButton {
            margin-inline-start: auto;
            padding: .25em 2em;
            border: thin solid var(--primary-gray);
            border-radius: 6px;
            background-color: var(--secondary-gray);
        }

        .introductions {
            display: flex;
            align-items: center;
        }

        .introductions>dt::after {
            content: "：";
        }

        .introductions>dd+dt {
            margin-inline-start: 2em;
        }

        .introductions>dd {
            margin: 0 .25em;
            padding: .1em .5em;
            border-radius: 6px;
            text-align: center;
        }

        .introductions>.talent-type,
        .introductions>.talent-level {
            padding: .1em .25em;
            border-radius: 6px;
        }

        .introductions>.talent-type {
            border-width: medium;
            border-color: var(--primary-gray);
        }
    </style>
</head>

<body>
    <main>
        <header>
            <h1>天赋树-山河图·妖篇</h1>
            <div class="second-title">牧名 2024/4/24</div>
        </header>
        <section class="talents">
            <header>
                <span class="header-item">攻击</span>
                <span class="header-item">防御</span>
                <span class="header-item">爆发</span>
                <span class="header-item">反击</span>
                <span class="header-item">成长</span>
            </header>
            <ul id="talentsContainer"></ul>
            <footer>
                <strong>图册消耗：</strong><span id="totalCost">0</span><button id="resetButton">重置</span>
            </footer>
        </section>
        <section>
            <h2>补充说明</h2>
            <dl class="introductions">
                <dt>类型</dt>
                <dd class="talent-tactic">战法</dd>
                <dd class="talent-skill">技能</dd>
                <dd class="talent-equip">装备</dd>
                <dt>品质</dt>
                <dd class="talent-lv1">普通</dd>
                <dd class="talent-lv2">稀有</dd>
                <dd class="talent-lv3">史诗</dd>
                <dd class="talent-lv4">传说</dd>
            </dl>
        </section>
    </main>
    <script id="data" type="application/json">
        [{"id":1,"type":"tactic","name":"精于谋略·壹","desc":"你手牌数量少于4，你的【杀】伤害+1","cost":6,"level":2,"row":1,"col":1,"prev":[],"next":[3,5]},{"id":2,"type":"tactic","name":"技能传承","desc":"开局时，三选一获得一次稀有的技能","cost":6,"level":2,"row":1,"col":5,"prev":[],"next":[4,7]},{"id":3,"type":"skill","name":"空城","desc":"锁定技，若你没有手牌，你不能成为【杀】或【决斗】的目标。","cost":3,"level":1,"row":2,"col":2,"prev":[1],"next":[8]},{"id":4,"type":"skill","name":"追姬","desc":"出牌阶段开始时，你可以选择一项：1.回复1点体力，然后本阶段结束时弃置两张牌；2.摸两张牌，然后本阶段结束时失去1点体力。","cost":3,"level":1,"row":2,"col":3,"prev":[2],"next":[6,11]},{"id":5,"type":"skill","name":"烈刃","desc":"当你使用【杀】对目标角色造成伤害后，你可以与其拼点：若你赢，你获得其一张牌。","cost":3,"level":1,"row":3,"col":1,"prev":[1],"next":[10]},{"id":6,"type":"skill","name":"困奋","desc":"锁定技，结束阶段，你失去1点体力，然后摸两张牌。","cost":3,"level":1,"row":3,"col":4,"prev":[4],"next":[9]},{"id":7,"type":"skill","name":"反间","desc":"出牌阶段限一次，你可以展示并交给一名其他角色一张手牌，其选择一项：1.展示所有手牌，弃置与此牌相同花色的牌；2.失去1点体力。","cost":3,"level":1,"row":3,"col":5,"prev":[2],"next":[14]},{"id":8,"type":"tactic","name":"万物化甲","desc":"若你没有【防具】，进入战斗时装备随机【防具】","cost":5,"level":1,"row":4,"col":2,"prev":[3],"next":[12]},{"id":9,"type":"skill","name":"颂词","desc":"每名角色限一次，出牌阶段，你可以选择一项：1.令一名手牌数小于体力值的角色摸两张牌；2.令一名手牌数大于体力值的角色弃置两张牌。","cost":3,"level":1,"row":4,"col":4,"prev":[6],"next":[13]},{"id":10,"type":"skill","name":"离间","desc":"出牌阶段限一次，你可以弃置一张牌令一名男性角色视为对另一名男性角色使用一张不能被抵消的【决斗】。","cost":3,"level":1,"row":5,"col":1,"prev":[5],"next":[15]},{"id":11,"type":"tactic","name":"砥砺奋进·壹","desc":"当体力大于2点，回合开始时失去1点体力并摸1张牌","cost":5,"level":1,"row":5,"col":3,"prev":[4],"next":[16]},{"id":12,"type":"equip","name":"白银狮子","desc":"锁定技，当你受到伤害时，若伤害值大于1，将此伤害值改为1。当你失去装备区里的【白银狮子】时，你回复1点体力。","cost":8,"level":2,"row":6,"col":2,"prev":[8],"next":[18]},{"id":13,"type":"tactic","name":"后发先至","desc":"摸牌阶段，你的摸牌数-1；你的回合结束时，你摸2张牌","cost":5,"level":1,"row":6,"col":4,"prev":[9],"next":[17]},{"id":14,"type":"equip","name":"斩魂刀","desc":"攻击范围：3<br><font color='#00FF00'>技能</font><br>你对目标造成伤害时，若目标体力值不为满，你可以防止此伤害并令其体力值上限-1；","cost":8,"level":2,"row":6,"col":5,"prev":[7],"next":[20]},{"id":15,"type":"tactic","name":"远击之技","desc":"造成伤害时，若你与其距离大于2，此伤害+1","cost":5,"level":1,"row":7,"col":1,"prev":[10],"next":[21]},{"id":16,"type":"skill","name":"焚城","desc":"限定技，出牌阶段，你可以令所有其他角色依次选择一项：1.弃置任意张牌（须比上家弃置的牌多）；2.受到你造成的2点火焰伤害。","cost":3,"level":1,"row":7,"col":3,"prev":[11],"next":[19]},{"id":17,"type":"skill","name":"英魂","desc":"准备阶段，若你已受伤，你可以选择一名其他角色并选择一项：1.令其摸X张牌，然后弃置一张牌；2.令其摸一张牌，然后弃置X张牌。（X为你已损失体力值）","cost":3,"level":1,"row":7,"col":4,"prev":[13],"next":[22]},{"id":18,"type":"tactic","name":"求仁得仁","desc":"回合外失去最后一张手牌后，摸1张牌","cost":5,"level":1,"row":8,"col":2,"prev":[12],"next":[23]},{"id":19,"type":"equip","name":"太公阴符","desc":"出牌阶段开始时，你可以令一名角色进入或解除连环状态；出牌阶段结束时，你可以重铸一张手牌。\n\n","cost":8,"level":2,"row":8,"col":3,"prev":[16],"next":[24]},{"id":20,"type":"tactic","name":"核心会员·壹","desc":"你可以消耗100铜币刷新商店，可刷新1次","cost":5,"level":1,"row":8,"col":5,"prev":[14],"next":[25]},{"id":21,"type":"equip","name":"古锭刀","desc":"攻击范围：2<br><font color='#00FF00'>技能</font><br>锁定技，当你使用【杀】对目标角色造成伤害时，若该角色没有手牌，则此伤害+1。","cost":8,"level":2,"row":9,"col":1,"prev":[15],"next":[26]},{"id":22,"type":"equip","name":"钩镶","desc":"锁定技，你使用同花色或同点数【闪】响应【杀】后，随机获取对方一张手牌;","cost":8,"level":2,"row":9,"col":4,"prev":[17],"next":[28]},{"id":23,"type":"skill","name":"卫境","desc":"每轮限一次，你可以视为使用一张【杀】或【闪】。","cost":3,"level":1,"row":10,"col":2,"prev":[18],"next":[27]},{"id":24,"type":"skill","name":"涉猎","desc":"摸牌阶段，你可以改为亮出牌堆顶的五张牌，然后获得每种花色的牌各一张。","cost":3,"level":1,"row":10,"col":3,"prev":[19],"next":[31]},{"id":25,"type":"skill","name":"矜功","desc":"出牌阶段限一次，你可以将一张【杀】或装备牌当三张随机锦囊牌中的一张使用。","cost":3,"level":1,"row":10,"col":5,"prev":[20],"next":[29]},{"id":26,"type":"skill","name":"绝情","desc":"锁定技，你即将造成的伤害视为失去体力。","cost":4,"level":1,"row":11,"col":1,"prev":[21],"next":[30]},{"id":27,"type":"skill","name":"矢北","desc":"锁定技，当你每回合首次受到伤害后，你回复1点体力，然后当你本回合再受到伤害后，你失去1点体力。","cost":4,"level":1,"row":11,"col":2,"prev":[23],"next":[33]},{"id":28,"type":"tactic","name":"嗜血狂暴·叁","desc":"当你的体力值不大于3时，你摸牌数+1","cost":6,"level":1,"row":12,"col":4,"prev":[22],"next":[32]},{"id":29,"type":"skill","name":"散谣","desc":"出牌阶段各限一次，你可以弃置一张牌对一名体力值/手牌数最大的角色造成1点伤害。","cost":4,"level":1,"row":12,"col":5,"prev":[25],"next":[34]},{"id":30,"type":"skill","name":"义绝","desc":"出牌阶段限一次，你可以弃置一张牌，然后令一名其他角色展示一张手牌。若此牌为：黑色，其本回合非锁定技失效且不能使用或打出手牌，你本回合对其使用的红桃【杀】伤害+1；红色，你获得之，然后你可以令其回复1点体力。","cost":8,"level":2,"row":13,"col":1,"prev":[26],"next":[33,35]},{"id":31,"type":"tactic","name":"随身皮囊·壹","desc":"手牌上限+1","cost":6,"level":1,"row":13,"col":3,"prev":[24],"next":[33,36]},{"id":32,"type":"skill","name":"趫猛","desc":"当你使用【杀】对一名角色造成伤害后，你可以弃置其区域里的一张牌。若此牌为坐骑牌，你获得之。","cost":8,"level":2,"row":13,"col":4,"prev":[28],"next":[34,37]},{"id":33,"type":"tactic","name":"厚实表皮·壹","desc":"每轮你受到的首次伤害-1","cost":14,"level":2,"row":14,"col":2,"prev":[27,30,31],"next":[38]},{"id":34,"type":"tactic","name":"羁绊","desc":"场上每存在一名队友，你的出杀次数+1","cost":14,"level":2,"row":14,"col":5,"prev":[29,32],"next":[39]},{"id":35,"type":"tactic","name":"淬血·壹","desc":"你每轮【杀】首次造成伤害后摸1张牌","cost":14,"level":2,"row":15,"col":1,"prev":[30],"next":[40]},{"id":36,"type":"equip","name":"平安符","desc":"攻击范围：3<br><font color='#00FF00'>技能</font><br>锁定技，摸牌阶段开始时，你额外摸X张牌（X为你本局击败的人数）;","cost":10,"level":2,"row":15,"col":3,"prev":[31],"next":[41]},{"id":37,"type":"tactic","name":"粮草剥夺","desc":"敌方摸牌数-1","cost":14,"level":2,"row":15,"col":4,"prev":[32],"next":[43]},{"id":38,"type":"skill","name":"享乐","desc":"锁定技，当你成为一名角色使用【杀】的目标后，除非其弃置一张基本牌，否则令此【杀】对你无效。","cost":8,"level":2,"row":16,"col":2,"prev":[33],"next":[42]},{"id":39,"type":"skill","name":"锦织","desc":"当你需要使用或打出基本牌时，你可以：弃置X张颜色相同的牌（X为你本轮发动本技能的次数），然后摸一张牌，视为你使用或打出此基本牌。","cost":8,"level":2,"row":16,"col":5,"prev":[34],"next":[45]},{"id":40,"type":"skill","name":"谮构","desc":"当你攻击范围内一名角色使用【闪】时，你可以弃置一张非基本牌或失去1点体力令此【闪】无效，然后你获得此【闪】。","cost":8,"level":2,"row":17,"col":1,"prev":[35],"next":[46]},{"id":41,"type":"skill","name":"丰姿","desc":"出牌阶段限一次，当你使用基本牌或普通锦囊牌时，你可以弃置一张类型相同的手牌令此牌的效果结算两次。","cost":8,"level":2,"row":17,"col":3,"prev":[36],"next":[44]},{"id":42,"type":"tactic","name":"信手拈来","desc":"你的手牌上限不因体力值改变而改变","cost":14,"level":2,"row":18,"col":2,"prev":[38],"next":[44,48]},{"id":43,"type":"skill","name":"求援","desc":"当你成为【杀】的目标时，你可以令另一名其他角色选择一项：1.交给你一张【闪】；2.成为此【杀】的额外目标。","cost":8,"level":2,"row":18,"col":4,"prev":[37],"next":[44,47]},{"id":44,"type":"tactic","name":"筹备·贰","desc":"游戏开始时，你获得2张随机手牌","cost":14,"level":2,"row":19,"col":3,"prev":[41,42,43],"next":[49]},{"id":45,"type":"tactic","name":"蒸蒸日上","desc":"通过战斗关卡时，有20%几率获得更高一级的战法和技能奖励","cost":14,"level":2,"row":19,"col":5,"prev":[39],"next":[50]},{"id":46,"type":"tactic","name":"潜龙在渊","desc":"每有一个已解锁的空技能槽，则出杀次数+1","cost":6,"level":1,"row":20,"col":1,"prev":[40],"next":[51]},{"id":47,"type":"tactic","name":"五鬼搬运","desc":"你的回合开始时，从随机敌方手牌区获得1张牌","cost":14,"level":2,"row":20,"col":4,"prev":[43],"next":[52]},{"id":48,"type":"skill","name":"看破","desc":"你可以将一张黑色牌当【无懈可击】使用。你的【无懈可击】不能被响应。","cost":8,"level":2,"row":21,"col":2,"prev":[42],"next":[55]},{"id":49,"type":"skill","name":"定措","desc":"每回合限一次，当你造成或受到伤害后，你可以摸两张牌，若这两张牌颜色不同，你弃置一张手牌。","cost":10,"level":2,"row":21,"col":3,"prev":[44],"next":[53]},{"id":50,"type":"skill","name":"落英","desc":"当其他角色的梅花牌因弃置或判定而置入弃牌堆后，你可以获得其中任意张牌。","cost":10,"level":2,"row":21,"col":5,"prev":[45],"next":[54]},{"id":51,"type":"equip","name":"束发紫金冠","desc":"准备阶段，你可以对一名其他角色造成1点伤害。","cost":14,"level":2,"row":22,"col":1,"prev":[46],"next":[55,59]},{"id":52,"type":"skill","name":"伺盗","desc":"出牌阶段限一次，当你对一名其他角色连续使用两张牌后，你可以将一张手牌当【顺手牵羊】对其使用（须合法）。","cost":10,"level":2,"row":22,"col":4,"prev":[47],"next":[56]},{"id":53,"type":"tactic","name":"雷霆万钧","desc":"所有角色在判定阶段都要进行一次【闪电】判定","cost":16,"level":2,"row":23,"col":3,"prev":[49],"next":[55,57]},{"id":54,"type":"equip","name":"赤炎镇魂琴","desc":"锁定技，你造成的伤害均视为火焰伤害。","cost":14,"level":2,"row":23,"col":5,"prev":[50],"next":[58]},{"id":55,"type":"skill","name":"再起","desc":"摸牌阶段，若你已受伤，你可以改为亮出牌堆顶X张牌（X为你已损失体力值+1），回复与其中红桃牌数等量的体力并获得剩余牌。","cost":10,"level":2,"row":24,"col":2,"prev":[48,51,53],"next":[60]},{"id":56,"type":"equip","name":"玲珑狮蛮带","desc":"当其他角色使用牌指定你为唯一目标后，你可以判定，若结果为红桃，此牌对你无效。","cost":14,"level":2,"row":24,"col":4,"prev":[52],"next":[62]},{"id":57,"type":"skill","name":"精策","desc":"你每于回合内使用一种花色的手牌，本回合手牌上限便+1。出牌阶段结束时，你可以摸X张牌（X为你本回合使用过牌的类型数）。","cost":10,"level":2,"row":25,"col":3,"prev":[53],"next":[65]},{"id":58,"type":"skill","name":"攻心","desc":"出牌阶段限一次，你可以观看一名其他角色的手牌，然后你可以展示其中一张红桃牌并选择一项：1.弃置此牌；2.将此牌置于牌堆顶。","cost":10,"level":2,"row":25,"col":5,"prev":[54],"next":[63]},{"id":59,"type":"skill","name":"狼袭","desc":"准备阶段，你可以对一名体力值不大于你的其他角色造成0~2点随机伤害。","cost":10,"level":2,"row":26,"col":1,"prev":[51],"next":[64]},{"id":60,"type":"equip","name":"黑光铠","desc":"锁定技，当你成为【杀】、伤害锦囊牌或黑色锦囊牌的目标后，若你不是唯一目标，此牌对你无效。","cost":14,"level":2,"row":26,"col":2,"prev":[55],"next":[61]},{"id":61,"type":"skill","name":"良助","desc":"当一名角色于其出牌阶段内回复体力后，你可以选择一项：1.摸一张牌；2.令其摸两张牌。","cost":14,"level":3,"row":27,"col":2,"prev":[60],"next":[66]},{"id":62,"type":"skill","name":"清弦","desc":"当你受到伤害/回复体力后，若没有角色处于濒死状态，你可以令伤害来源/一名其他角色执行一项：1.失去1点体力，随机使用一张装备牌；2.回复1点体力，弃置一张装备牌。若其使用或弃置的牌为梅花牌，你摸一张牌。 ","cost":14,"level":3,"row":27,"col":4,"prev":[56],"next":[68]},{"id":63,"type":"equip","name":"鸾凤和鸣剑","desc":"攻击范围：3<br><font color='#00FF00'>技能</font><br>当你使用的雷【杀】或火【杀】指定目标后，你可以令对方选择一项：1.弃置一张牌；2.令你摸一张牌。","cost":20,"level":3,"row":27,"col":5,"prev":[58],"next":[68,70]},{"id":64,"type":"skill","name":"筹伐","desc":"出牌阶段限一次，你可以展示一名其他角色一张手牌，其当前手牌区内与此牌类型不同的牌均视为【杀】直到其回合结束。","cost":14,"level":3,"row":28,"col":1,"prev":[59],"next":[69]},{"id":65,"type":"tactic","name":"手到擒来·叁","desc":"每回合你使用第6张牌后,你摸2张牌","cost":30,"level":3,"row":28,"col":3,"prev":[57],"next":[67,68]},{"id":66,"type":"equip","name":"铁甲胄","desc":"当你受到高于1点的伤害或致命伤害时，你可以将装备区里的【铁甲胄】置入弃牌堆；然后你于本回合结束前，防止你受到的伤害；","cost":20,"level":3,"row":29,"col":2,"prev":[61],"next":[69,74]},{"id":67,"type":"skill","name":"制衡","desc":"出牌阶段限一次，你可以弃置任意张牌，然后摸等量张牌，若你以此法弃置了所有手牌，你额外摸一张牌。","cost":14,"level":3,"row":29,"col":3,"prev":[65],"next":[72]},{"id":68,"type":"tactic","name":"塞翁失马","desc":"受到1点伤害后，摸一张牌","cost":30,"level":3,"row":29,"col":4,"prev":[62,63,65],"next":[73]},{"id":69,"type":"tactic","name":"横江锁","desc":"【铁索连环】能指定任意个目标","cost":30,"level":3,"row":30,"col":1,"prev":[64,66],"next":[71]},{"id":70,"type":"skill","name":"完杀","desc":"锁定技，在你的回合内：只有你和处于濒死状态的角色才能使用【桃】；任意角色的濒死结算中，除你和濒死角色外的其他角色的非锁定技失效。","cost":14,"level":3,"row":30,"col":5,"prev":[63],"next":[75]},{"id":71,"type":"skill","name":"劫营","desc":"回合开始时，若场上没有「营」标记，你获得「营」。结束阶段，你可以将「营」置于一名角色的武将牌上。有「营」的角色摸牌阶段多摸一张牌、出牌阶段使用【杀】的限制次数+1、手牌上限+1。有「营」的其他角色回合结束后，你获得其所有手牌和「营」。","cost":18,"level":3,"row":31,"col":1,"prev":[69],"next":[78]},{"id":72,"type":"skill","name":"誉虚","desc":"当你于出牌阶段使用牌后，你可以摸一张牌，若如此做，当你本阶段使用下一张牌后，你不能以此法摸牌且须弃置一张牌。","cost":18,"level":3,"row":31,"col":3,"prev":[67],"next":[76]},{"id":73,"type":"skill","name":"雷击","desc":"当你使用或打出【闪】或使用【闪电】时，你可以判定。当你判定后，若结果为：黑桃，你可以对一名角色造成2点雷电伤害；梅花，你回复1点体力并可以对一名角色造成1点雷电伤害。","cost":18,"level":3,"row":31,"col":4,"prev":[68],"next":[75,80]},{"id":74,"type":"tactic","name":"好身法","desc":"【闪】不计入手牌上限","cost":38,"level":3,"row":32,"col":2,"prev":[66],"next":[79]},{"id":75,"type":"tactic","name":"刚猛加持","desc":"你的所有队友体力+3","cost":38,"level":3,"row":32,"col":5,"prev":[70,73],"next":[77]},{"id":76,"type":"tactic","name":"神龙摆尾·贰","desc":"你每摸6张卡牌，你对随机敌方造成1点伤害","cost":40,"level":3,"row":33,"col":3,"prev":[72],"next":[81]},{"id":77,"type":"skill","name":"威仪","desc":"每名角色限一次，当一名角色受到伤害后，若其体力值：1.不小于你，你可以令其失去1点体力；2.不大于你，你可以令其回复1点体力。","cost":20,"level":3,"row":33,"col":5,"prev":[75],"next":[84]},{"id":78,"type":"tactic","name":"拂衣去·锁","desc":"你的回合开始时，你获得1张【铁索连环】","cost":40,"level":3,"row":34,"col":1,"prev":[71],"next":[88]},{"id":79,"type":"skill","name":"天香","desc":"当你受到伤害时，你可以弃置一张红桃牌防止之并选择一项，令一名其他角色：1.受到伤害来源的1点伤害并摸X张牌（X为其已损失体力值且至多为5）；2.失去1点体力并获得你弃置的牌。","cost":20,"level":3,"row":34,"col":2,"prev":[74],"next":[83]},{"id":80,"type":"skill","name":"归心","desc":"当你受到1点伤害后，你可以随机获得每名其他角色区域里的一张牌，然后翻面。","cost":20,"level":3,"row":34,"col":4,"prev":[73],"next":[82]},{"id":81,"type":"skill","name":"连破","desc":"你杀死过角色的回合结束后，你可以执行一个额外的回合。","cost":20,"level":3,"row":35,"col":3,"prev":[76],"next":[86]},{"id":82,"type":"equip","name":"禅让诏书","desc":"每回合每名角色限一次，当其他角色于其回合外首次获得牌时，你可以交给其一张牌或令其交给你一张牌。","cost":25,"level":3,"row":35,"col":4,"prev":[80],"next":[87]},{"id":83,"type":"tactic","name":"药理精通·壹","desc":"回复体力时，额外回复1点","cost":40,"level":3,"row":36,"col":2,"prev":[79],"next":[85]},{"id":84,"type":"skill","name":"慎断","desc":"当你的一张黑色基本牌被弃置后，你可以将此牌当无距离限制的【兵粮寸断】使用。","cost":20,"level":3,"row":36,"col":5,"prev":[77],"next":[89]},{"id":85,"type":"skill","name":"称象","desc":"当你受到伤害后，你可以亮出牌堆顶四张牌，获得其中任意张点数和不大于13的牌。","cost":20,"level":3,"row":37,"col":2,"prev":[83],"next":[93]},{"id":86,"type":"equip","name":"虚妄之冕","desc":"锁定技，摸牌阶段，你多摸两张牌。你的手牌上限-1。","cost":25,"level":3,"row":37,"col":3,"prev":[81],"next":[91]},{"id":87,"type":"tactic","name":"拂衣去·顺","desc":"你的回合开始时，你获得1张【顺手牵羊】","cost":40,"level":3,"row":37,"col":4,"prev":[82],"next":[89,92]},{"id":88,"type":"equip","name":"妖刀赤瞳","desc":"攻击范围：2<br><font color='#00FF00'>技能</font><br>锁定技，你使用黑色【杀】造成的伤害+1，当你使用【杀】指定目标后需判定，若为黑色，则随机转移为其他合法目标；","cost":25,"level":3,"row":38,"col":1,"prev":[78],"next":[90,91]},{"id":89,"type":"tactic","name":"兄弟会·贰","desc":"开始剧本时，你获得1名精英队友","cost":40,"level":3,"row":38,"col":5,"prev":[84,87],"next":[94]},{"id":90,"type":"skill","name":"神赋","desc":"回合结束时，若你的手牌数为：奇数，你对一名其他角色造成1点雷电伤害，若其因此死亡，你可以重复此流程；偶数，你令一名角色摸一张牌或弃置一张手牌，然后若其手牌数等于体力值，你可以重复此流程。","cost":25,"level":3,"row":39,"col":1,"prev":[88],"next":[97]},{"id":91,"type":"tactic","name":"拔刀术·贰","desc":"若上一轮造成的伤害小于3，则你本轮造成的所有伤害+1","cost":65,"level":4,"row":39,"col":3,"prev":[86,88],"next":[98]},{"id":92,"type":"skill","name":"强识","desc":"出牌阶段开始时，你可以展示一名其他角色一张手牌，然后当你本阶段使用与展示牌类型相同的牌时，你可以摸一张牌。","cost":25,"level":4,"row":39,"col":4,"prev":[87],"next":[96]},{"id":93,"type":"skill","name":"节命","desc":"当你受到1点伤害后，你可以令一名角色将手牌摸至X张（X为其体力上限且至多为5）。","cost":25,"level":3,"row":40,"col":2,"prev":[85],"next":[95,96]},{"id":94,"type":"skill","name":"伏骑","desc":"锁定技，与你距离为1的其他角色不能使用或打出牌响应你使用的牌。","cost":25,"level":4,"row":40,"col":5,"prev":[89],"next":[99]},{"id":95,"type":"skill","name":"龙魂","desc":"你可以将至多两张花色相同的牌按以下规则使用或打出：红桃当【桃】；方块当火【杀】；梅花当【闪】；黑桃当【无懈可击】。若你以此法转化使用了两张：红色牌，此牌回复值或伤害值+1；黑色牌，你弃置当前回合角色一张牌。","cost":30,"level":4,"row":41,"col":2,"prev":[93],"next":[100]},{"id":96,"type":"tactic","name":"应急战略","desc":"回合外成为敌方角色使用牌唯一目标，随机弃置来源1张牌","cost":80,"level":4,"row":41,"col":4,"prev":[92,93],"next":[101]},{"id":97,"type":"skill","name":"凌人","desc":"出牌阶段限一次，当你使用【杀】或伤害锦囊牌时，你可以猜测其中一个目标的手牌中是否有基本牌、锦囊牌或装备牌，若至少猜对：1项，此牌对其伤害+1；2项，你摸两张牌；3项，你获得<font href='717'>【奸雄】</font><font href='105'>【行殇】</font>直到你下回合开始。","cost":25,"level":4,"row":42,"col":1,"prev":[90],"next":[102]},{"id":98,"type":"skill","name":"蒺藜","desc":"当你每回合使用或打出第X张牌时，你可以摸X张牌。（X为你的攻击范围）","cost":30,"level":4,"row":42,"col":3,"prev":[91],"next":[100,105]},{"id":99,"type":"skill","name":"托孤","desc":"当一名角色死亡时，你可以令其选择其武将牌上的一个技能（限定技、觉醒技、主公技和包含隐匿的技能除外），你失去上次以此法获得的技能，然后获得此技能。","cost":30,"level":4,"row":42,"col":5,"prev":[94],"next":[103]},{"id":100,"type":"tactic","name":"铁布衫·肆","desc":"游戏开始时，你获得6点护甲","cost":80,"level":4,"row":43,"col":2,"prev":[95,98],"next":[104]},{"id":101,"type":"equip","name":"红锦百花袍","desc":"锁定技，防止你受到的属性伤害。","cost":40,"level":4,"row":43,"col":4,"prev":[96],"next":[107]},{"id":102,"type":"equip","name":"断魂","desc":"攻击范围：2<br><font color='#00FF00'>技能</font><br>锁定技，你造成的伤害无视目标护甲；","cost":40,"level":4,"row":44,"col":1,"prev":[97],"next":[106]},{"id":103,"type":"tactic","name":"利滚利·贰","desc":"每场战斗后,你的总铜币数量增加10%","cost":80,"level":4,"row":44,"col":5,"prev":[99],"next":[108]},{"id":104,"type":"equip","name":"昆仑镜","desc":"锁定技，在你受到一张锦囊牌伤害后，直至战斗结束，防止同名锦囊牌对你造成的伤害；","cost":40,"level":4,"row":45,"col":2,"prev":[100],"next":[106,111]},{"id":105,"type":"skill","name":"渐营","desc":"当你于出牌阶段使用牌时，若此牌的点数或花色与你本阶段使用的上一张牌相同，你可以摸一张牌。","cost":30,"level":4,"row":45,"col":3,"prev":[98],"next":[110]},{"id":106,"type":"tactic","name":"二连击·贰","desc":"你的出牌阶段，你的出杀次数+2","cost":80,"level":4,"row":46,"col":1,"prev":[102,104],"next":[109]},{"id":107,"type":"skill","name":"伤逝","desc":"当你的手牌数小于X后，你可以将手牌摸至X张。（X为你已损失体力值）","cost":30,"level":4,"row":46,"col":4,"prev":[101],"next":[112]},{"id":108,"type":"skill","name":"博图","desc":"每轮限X次（X为存活角色数且至多为3），回合结束后，若本回合置入弃牌堆的牌包含四种花色，你可以执行一个额外回合。","cost":30,"level":4,"row":46,"col":5,"prev":[103],"next":[113]},{"id":109,"type":"skill","name":"奔袭","desc":"锁定技，当你于回合内使用牌时，你本回合计算与其他角色的距离-1。当你于回合内使用仅指定单一目标的【杀】或普通锦囊牌时，若你与所有其他角色的距离均为1，你依次选择至多两项，令此牌：1.目标数+1；2.无视防具；3.不能被抵消；4.造成伤害后，你摸一张牌。","cost":30,"level":4,"row":47,"col":1,"prev":[106],"next":[114]},{"id":110,"type":"equip","name":"螭纹玉佩","desc":"锁定技，出牌阶段结束时回复你的1点体力；摸牌阶段开始时，若你体力为满，则摸牌数+2；","cost":40,"level":4,"row":47,"col":3,"prev":[105],"next":[115]},{"id":111,"type":"skill","name":"魅步","desc":"其他角色出牌阶段开始时，若你在其攻击范围内，你可以弃置一张牌，令其本回合视为拥有<font href='258'>【止息】</font>。若你弃置的牌不是【杀】或黑色锦囊牌，本回合其与你的距离视为1。","cost":30,"level":4,"row":48,"col":2,"prev":[104],"next":[117]},{"id":112,"type":"skill","name":"乱战","desc":"当你造成或受到伤害后，你获得1枚「乱战」标记。当你使用【杀】或黑色普通锦囊牌指定目标后，若目标角色数小于X，你移除一半「乱战」标记（向上取整）。你使用【杀】或黑色普通锦囊牌可以多指定X个目标。（X为「乱战」标记数）","cost":30,"level":4,"row":48,"col":4,"prev":[107],"next":[119,120]},{"id":113,"type":"equip","name":"国风玉袍","desc":"锁定技，你不能成为其他角色使用普通锦囊牌的目标。","cost":40,"level":4,"row":48,"col":5,"prev":[108],"next":[120]},{"id":114,"type":"skill","name":"狂骨","desc":"当你对距离1以内的一名角色造成1点伤害后，你可以回复1点体力或摸一张牌。","cost":30,"level":4,"row":49,"col":1,"prev":[109],"next":[116]},{"id":115,"type":"skill","name":"苦肉","desc":"出牌阶段，你可以失去1点体力，然后摸两张牌。","cost":30,"level":4,"row":49,"col":3,"prev":[110],"next":[118]},{"id":116,"type":"tactic","name":"迅雷猛火·贰","desc":"每回合限1次，你使用的第1张属性【杀】伤害+2","cost":80,"level":4,"row":50,"col":1,"prev":[114],"next":[]},{"id":117,"type":"tactic","name":"强健体魄·叁","desc":"游戏开始时，你增加3点体力上限并回复等量体力","cost":80,"level":4,"row":50,"col":2,"prev":[111],"next":[]},{"id":118,"type":"tactic","name":"两手准备·贰","desc":"局外手牌每增加2张，游戏开始额外获得1张手牌","cost":80,"level":4,"row":50,"col":3,"prev":[115],"next":[]},{"id":119,"type":"tactic","name":"偏转之甲","desc":"每次受到伤害后对随机敌方造成1点伤害","cost":80,"level":4,"row":50,"col":4,"prev":[112],"next":[]},{"id":120,"type":"tactic","name":"日行千里·贰","desc":"每个章节，你可以额外行动2次","cost":80,"level":4,"row":50,"col":5,"prev":[113,112],"next":[]}]
    </script>
    <script type="text/javascript">
        (function () {
            "use strict";
            const talents = JSON.parse(document.getElementById("data").text);
            if (!Array.isArray(talents) || talents.length === 9) {
                console.error('no data');
                alert('no data');
                return;
            }
            const talentDict = new Map();
            const checkedTalentIds = new Set();
            const talentElementDict = new Map();
            let totalCost = 0;
            function createTalentItemElement(talent) {
                const itemElement = document.createElement('li');
                itemElement.classList.add('talent-item', `talent-lv${talent.level}`, `talent-${talent.type}`);
                itemElement.style.cssText = `grid-area: ${talent.row}/${talent.col}/span 1/span 1;`;
                itemElement.setAttribute('data-talent-id', talent.id);
                itemElement.setAttribute('data-talent-cost', talent.cost);
                const title = talent.desc.replaceAll(/<br\/?>/g, '\n')
                    .replaceAll(/<font(?:s+[w-]+=('|")[#ws-]+\1)+>([^<>]+)<\/font>/g, '$2')
                    .replaceAll(/(.{20})/gm, '$1\n');
                itemElement.setAttribute('title', title);
                itemElement.textContent = talent.name;
                return itemElement;
            }
            function toggleTalent(id) {
                if (!checkedTalentIds.has(id)) {
                    checkTalent(id);
                } else {
                    uncheckTalent(id);
                }
            }
            function checkTalent(id) {
                const processTalentIds = Array.of(id);
                while (processTalentIds.length > 0) {
                    const curTalentId = processTalentIds.pop();
                    if (checkedTalentIds.has(curTalentId)) {
                        continue;
                    }
                    checkedTalentIds.add(curTalentId);
                    const curElement = talentElementDict.get(curTalentId);
                    curElement.classList.add('checked');
                    const curTalent = talentDict.get(curTalentId);
                    totalCost += curTalent.cost;
                    processTalentIds.push.apply(processTalentIds, curTalent.prev);
                }
            }
            function uncheckTalent(id) {
                const processTalentIds = Array.of(id);
                while (processTalentIds.length > 0) {
                    const curTalentId = processTalentIds.pop();
                    if (!checkedTalentIds.has(curTalentId)) {
                        continue;
                    }
                    checkedTalentIds.delete(curTalentId);
                    const curElement = talentElementDict.get(curTalentId);
                    curElement.classList.remove('checked');
                    const curTalent = talentDict.get(curTalentId);
                    totalCost -= curTalent.cost;
                    processTalentIds.push.apply(processTalentIds, curTalent.next);
                }
            }
            function resetTalents() {
                for (const id of checkedTalentIds) {
                    const curElement = talentElementDict.get(id);
                    curElement.classList.remove('checked');
                }
                checkedTalentIds.clear();
                totalCost = 0;
            }
            document.addEventListener('DOMContentLoaded', () => {
                const totalCostElement = document.getElementById('totalCost');
                const resetButton = document.getElementById('resetButton');
                const container = document.getElementById('talentsContainer');
                container.addEventListener('click', (event) => {
                    const target = event.target;
                    if (!target.matches("li.talent-item")) {
                        return;
                    }
                    event.stopPropagation();
                    const talentId = parseInt(target.getAttribute('data-talent-id'));
                    toggleTalent(talentId);
                    totalCostElement.textContent = totalCost;
                });
                resetButton.addEventListener('click', () => {
                    resetTalents();
                    totalCostElement.textContent = totalCost;
                });
                for (const talent of talents) {
                    talentDict.set(talent.id, talent);
                    const itemElement = createTalentItemElement(talent);
                    container.appendChild(itemElement);
                    talentElementDict.set(talent.id, itemElement);
                }
            });
        })();
    </script>
</body>

</html>